Оператор [break]
Описание
Логические узлы правила обрабатываются последовательно — от первого до последнего. Если нет необходимости обрабатывать все узлы, можно воспользоваться оператором [break], который прерывает обработку текущего правила при определённых условиях. Оператор [break], как правило, размещается последним в списке операторов узла. Если [break] возвращает true, следующие узлы правила не выполняются.
Пример
В примере ниже в первом узле определяется наличие SIM-карты в слоте. Если её нет, то нет смысла проверять уровень сигнала во втором узле — GSM-модем не зарегистрирован.
-- Узел "N1_sim_found"
----------------------
-- Проверить что Сим-карта находится в слоте
N1_sim_found = { -- Создаём логический узел "simfound"
{
["load-ubus"] = function (nodes) -- Оператор [load-ubus] через системную шину
return { -- получает от GSM-модема статус наличия
object = "tsmodem.driver", -- сим-карты в слоте
method = "cpin", -- Результат:
params = {}, -- {
} -- "value": "true",
end, -- "updated": "1773160342"
}, -- "changed": "1773160300"
-- }
{ ----------------------
["break"] = function(nodes) -- Оператор ["break"]
----------------------
local sim_not_found = (nodes.N1_sim_found == false)
if sim_not_found then
return true -- Если сим-карта не найдена в слоте,
else -- то нет смысла выполнять следующий узел
return false -- "N2_cellular_signal_strength".
end -- Поэтому оператор ["break"] прерывает
end -- дальнейшую обработку правила
}
}
-- Узел "N2_cellular_signal_strength"
--------------------------------------
-- Получить посредством шины UBUS значение уровня сигнала до базовой станции
N2_cellular_signal_strength = {
{
["load-ubus"] = function(nodes)
return {
ubus = "tsmodem", -- Имя объекта на шине
method = "signal", -- Вызываемый метод
params = {}, -- без параметров
}
end
},
}
Примечание
Если оператор [break] сработал в текущем правиле, обработка передаётся следующему правилу в рамках данной итерации.